<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="utf-8" />
        <title>chapter6</title>
        <link rel="stylesheet" href="/theme/css/main.css" />

        <!--[if IE]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
</head>

<body id="index" class="home">
        <header id="banner" class="body">
                <h1><a href="/">PythonTutorials </a></h1>
                <nav><ul>
                    <li class="active"><a href="/category/cpp.html">cpp</a></li>
                    <li><a href="/category/python.html">python</a></li>
                </ul>
                </nav>
        </header><!-- /#banner -->
<section id="content" class="body">
  <article>
    <header>
      <h1 class="entry-title">
        <a href="/chapter6.html" rel="bookmark"
           title="Permalink to chapter6">chapter6</a></h1>
    </header>

    <div class="entry-content">
<footer class="post-info">
        <span>Mon 06 April 2020</span>
<span>| tags: <a href="/tag/cpp.html">cpp</a><a href="/tag/progarmming.html">progarmming</a></span>
</footer><!-- /.post-info -->      <h5>特点：同一数组中的所有元素都属于同一种数据类型（如，int，float，char），数组元素用数组名和数组的下表来表示。(一批同类型的数据)</h5>
<h5>方法：一个数组其实就是一个变量，可以称为带有下标的变量。</h5>
<h1>一、一维数组</h1>
<ul>
<li><strong>定义:</strong>   ==类型名 数组名[常量表达式]，float score[50];==<ul>
<li>数组定义注意事项:</li>
<li>数组名属于用户自定义标识符；</li>
<li>定义一维数组时，数组名后必须有一个方括号，常量表达式的数值表示所定义的数组一共有多少个元素（称为数组长度或数组的大小）。</li>
<li>定义中，方括号中不能含有变量，且常量表达式的数值必须是正整数。</li>
<li>C语言中数组在内存中分配得空间是连续的。</li>
<li>数组必须先定义，后使用</li>
<li>不能整体使用数组名，只能使用元素</li>
<li>数组应该是单行单列的数据。</li>
<li>一维二维数组是地址常量。</li>
</ul>
</li>
<li><strong>使用：</strong>   ==数组名[下标]==<ul>
<li>有N个元素的的数组，下标的数值在（0 ~ N-1之间），char a[10];a[0] = 'a'; </li>
<li>数组的下标是可以变化的，故可以是变量，单不可越界。</li>
</ul>
</li>
<li><strong>初始化：</strong>  ==类型名  数组名[常量表达式]= {value1，value2,value3,...};==<ul>
<li>定义一维数组时，可以将各元素的初始值依次放在一对{}中，赋初始值，初始值之间用逗号分隔int num[3]={0,1,2};</li>
<li>多则出错，少则补0；int num[3] = {11};</li>
<li>定义赋初值的数组，如果初值个数等于数组长度，则数组长度可以省略；int a[] = {1,2,3};</li>
<li>一个初始值也不给，则为随机值。</li>
<li>只能在数组定义的同时用{}给数组元素整体赋值；</li>
</ul>
</li>
</ul>
<h1>二、二维数组(多行多列)</h1>
<ul>
<li>
<p><strong>定义</strong>： 类型名  数组名[常量表达式1][常量表达式2];int student[10][6];常量表达式1表示行数，常量表达式2为列数。</p>
<ul>
<li>数组名遵循用户自定义标识符。</li>
<li>定义二维数组，第一个花括号常量表示行数，第二个花括号表示列数，int a[4][5];</li>
<li>定义二维数组时，方括号中不能包含变量。</li>
<li>在内存中二维数组的存放是连续的，先行后列。</li>
</ul>
</li>
<li>
<p><strong>使用</strong>： 数组名[行下标][列下标]</p>
<ul>
<li>不能整体使用，只能使用其中的元素</li>
<li>使用二维数组元素，必须有两个下标，都是从0开始依次加1。</li>
</ul>
</li>
<li><strong>初始化</strong>：<ul>
<li>方法1：<ul>
<li>将初值依次放在一对{}中，与一维的初始化方法相同，比如：int num[2][3] = {1,2,3,4,5,6};可以按行划分，即可知道知道具体元素的下标。 </li>
</ul>
</li>
<li>方法2 <ul>
<li>定义二维数组时，按行初始化，每一行的初值，均用一对花括号{}扩起来，采用嵌套花括号{}的方式，如：int num[2][3] = {<code 4_5_6="4,5,6">{1,2,3},</code>};</li>
<li>嵌套花括号之间需要有逗号。</li>
</ul>
</li>
<li>初始化注意事项：<ul>
<li>定义二维数组的同时给数组初始化，只可以省略行数，不可以省略列数。比如：int a[][3]={1,2,3,4,5,6} ,</li>
<li>错误举例：int a[2][]={1,2,3,4,5,6},int a[][3];</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1>三、字符数组（可保存字符串）</h1>
<p>C语言中没有字符串变量，那么如何存储字符串。
1. 方法1：字符数组来存放
    1. 字符数组初始化
        1. char s[5] = {'a','b','c','d','e'};
        2. 与其他类型的数组初始化一样，只是其初始值是字符；
        3. 字符数组的最后元素有'\0‘，则为字符串，没有则为字符数组。
    4. 字符串
        1. 因为字符串最后都有一个字符串结束标识符：“\0”
        2. 所以用字符数组来存放字符串时，一定要有一个元素存放结束符"\0"
    2. 注意事项：
        1. 字符串常量最后有一个"\0"，比如"abcd"由5个字符组成，双引号""等价于"\0",是一个空字符串。空串有一个元素。
        2. 用字符串给字符数组进行初始化有三种情况：
        3. 方法1：char a[]="abcd"；该初始化省略了花括号。
        4. 方法2：char a[]={"abcd"}
        5. 方法3：char a[]={'a','b','c','d','\0'};
        6. ==char a[]={'a','b','c','d'};长度为4，但是不是字符串，切记！==
2. 方法2：字符型指针变量（后续课程）</p>
<h1>数组的应用</h1>
<h2>一、一维数组</h2>
<div class="highlight"><pre><span></span>int nums()
{
    //功能：将数组的元素按顺序结合四位数
    int a[]={1,2,3,4},i,j,s=0;
    j=1;    //初始化
    for(i=3;i&gt;=0;i--)
    {
        s += a[i]*j;    //或者权位的具体数
        j *=10; //权位增加
    }
    printf(&quot;s=%d\n&quot;,s);
    return 0;
}
</pre></div>


<h2>二、二维数组</h2>
<p>双循环遍历二维数组，然后输出结果。例一。</p>
<div class="highlight"><pre><span></span>//求A和A矩阵转置的和，并打印输出
demo2() 
{
    int a[3][3] = { 0 }, a1[3][3] = { 0 },b[3][3] = {0};
    int i, j, count = 1;
    //生成A矩阵
    for (i = 0; i &lt; 3; i++) 
    {
        for (j = 0; j &lt; 3; j++) 
        {
            a[i][j] = count;
            count++;
        }
    }
    //产生A矩阵的转置
    for (i = 0; i &lt; 3; i++)
    {
        for (j = 0; j &lt; 3; j++)
        {
            a1[i][j] =a[j][i];
        }
    }
    //生成矩阵B，A矩阵和B转置矩阵的和。
    for (i = 0; i &lt; 3; i++)
    {
        for (j = 0; j &lt; 3; j++)
        {
            b[i][j] = a[i][j]+a1[i][j];
        }
    }
    //输出矩阵B
    for (i = 0; i &lt; 3; i++)
    {
        for (j = 0; j &lt; 3; j++)
        {
            printf(&quot;%4d&quot;,b[i][j] );
        }
        printf(&quot;\n&quot;);
    }
}
</pre></div>


<p>双循环遍历二维数组，例二。</p>
<div class="highlight"><pre><span></span>array_2() 
{
    int i, j,s=0;
    int ab[3][3] = { {1,2},{3,4},{5,6} };
    for (i = 0; i &lt; 3; i++) 
    {
        for (j = 1; j &lt;=i; j++) s += ab[i][j];
    }
    printf(&quot;%d\n&quot;, s);
}
</pre></div>


<h2>三、字符数组</h2>
<ol>
<li>字符串存储（赋值）的四种方法：<ol>
<li>方法1：scanf();键盘输入。<ol>
<li>char a[10]; scanf("%s",a);</li>
<li>数组名本身就是地址，故不需要添加&amp;运算符。</li>
<li>用%s输入时，遇到空格或者回车，则直接结束输入。</li>
<li>多个%s出现时，必须连续写，中间不能有逗号或者空格等。</li>
<li>printf()输出。</li>
<li>举例如下：char a[10];scanf("%s",a);printf("%s",a);</li>
</ol>
</li>
<li>gets()键盘输入<ol>
<li>功能：读取一个字串赋给字符数组</li>
<li>用该函数输入字符时，只有遇到回车 才结束接受字符输入；</li>
<li>char str1[10];gets(str1);</li>
</ol>
</li>
<li>puts()<ol>
<li>puts(字符串数组字符串常量)</li>
<li>功能：在屏幕输出字符数组中的字符</li>
<li>用该函数输出与%s输出结果一样，只是该函数将'\0'换成'\n'</li>
</ol>
</li>
<li>方法4 字符串初始化<ol>
<li>char a[]="abcd";</li>
<li>char a[]={"abcd"};</li>
<li>char a[]={'a','b','c'.'d'}</li>
</ol>
</li>
</ol>
</li>
<li>字符串函数<ol>
<li>
<h1>include<string.h></h1>
<ol>
<li>strcat(字符数组1，字符数组2),将字符数组2追加到字符数组1的第一个\0后面。</li>
<li>strcpy(字符数组1，字符数组2)，将字符数组2中的字符串替换到字符数组1中，函数值为字符数组1的首地址</li>
<li>strcmp(字符数组1，字符数组2)，函数返回的为值相同位置不同字符的ascii码的差值<ol>
<li>返回三种结果：大于0，表示前面的字符大；等于0表示相同。小于0，表示，后面的的字符大。
4.strlen(字符数组)，求出字符数组的实际长度。不包括结束字符。</li>
<li>char a[10] = "44332ree2";printf("%d".strlen(a));</li>
<li>char b[10] = "abc\0128\0";printf("%d",strlen(b));第一个\0是八进制，</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<h1>C语言画图情况</h1>
<ol>
<li>一位数组、二维数组要画图</li>
<li>静态变量static要画图</li>
<li>指针要画图(画变量指向)，普通变量画房子</li>
<li>文件要画图</li>
<li>链表需要画图</li>
</ol>
    </div><!-- /.entry-content -->

  </article>
</section>
        <section id="extras" class="body">
                <div class="blogroll">
                        <h2>blogroll</h2>
                        <ul>
                            <li><a href="http://getpelican.com/">Pelican</a></li>
                            <li><a href="http://python.org/">Python.org</a></li>
                            <li><a href="http://jinja.pocoo.org/">Jinja2</a></li>
                            <li><a href="#">You can modify those links in your config file</a></li>
                        </ul>
                </div><!-- /.blogroll -->
                <div class="social">
                        <h2>social</h2>
                        <ul>

                            <li><a href="#">You can add links in your config file</a></li>
                            <li><a href="#">Another social link</a></li>
                        </ul>
                </div><!-- /.social -->
        </section><!-- /#extras -->

        <footer id="contentinfo" class="body">
                <p>Powered by <a href="http://www.maxiaoan.com/">Maxiaoan</a></p>
        </footer><!-- /#contentinfo -->

</body>
</html>